package org.jflame.commons.crypto.digest;

import org.jflame.commons.crypto.KeyUtils;

import org.bouncycastle.crypto.generators.OpenBSDBCrypt;

/**
 * 基于bouncy castle实现的BCrypt算法
 * 
 * @author charles.zhang
 */
public final class BCryptor {

    /**
     * 计算哈希值. 用默认成本因子10
     * 
     * @param password 明文, 小于72byte
     * @return
     */
    public static String hash(String password) {
        return hash(password, 10);
    }

    /**
     * 计算哈希值
     * 
     * @param password 明文, 小于72byte
     * @param cost 成本因子. 值范围4-31
     * @return
     */
    public static String hash(String password, int cost) {
        byte[] salt = KeyUtils.genSalt(16);
        return OpenBSDBCrypt.generate(password.toCharArray(), salt, cost);
    }

    /**
     * 检查明文与密文是否匹配
     * 
     * @param password 明文
     * @param encodedPassword BCrypt hash串
     * @return
     */
    public static boolean checkhash(String password, String encodedPassword) {
        return OpenBSDBCrypt.checkPassword(encodedPassword, password.toCharArray());
    }
}
